Haskell モナド
Monad(モナド)
Haskellにある、副作用を制御する仕組み?
モナドがあることによって、例えばdo構文による手続き型プログラミングができる
IOモナドが標準入力、標準出力、ファイル入出力のようなIO部分のモナド
自己関手の圏におけるモノイド対象
Hask圏
最近は下記のプロポーザルにしたがって各モナドの定義の置き換えが進んでいる
Functor-Applicative-Monad proposal (AMP)
Monad of no return/>> Proposal (MRP)
MonadFail proposal (MFP)
モナド則
code:memo.hs
1. return x >>= f = f x
2. m >>= return = m
3. (m >>= f) >>= g = m >>= (\x -> f x >>= g)
1. return xした結果をfで合成(>>=)した結果は、f xを実行した結果に等しい
2. モナドmをreturnで合成(>>=)した結果は変わらない
3.
数学っぽく書くと以下
圏$ C 、モナド$ M : C \to C と射$ f : A \to B (A,B \in C) があったとき、モナド則は以下のようになる。
1. $ \mathrm{join} \circ M(\mathrm{join}) = \mathrm{join} \circ \mathrm{join}
2. $ \mathrm{join} \circ M(\mathrm{unit}) = \mathrm{join} \circ \mathrm{unit} = \mathrm{id}
3. $ \mathrm{unit} \circ f = M(f) \circ \mathrm{unit}
4. $ \mathrm{join} \circ M(M(f)) = M(f) \circ \mathrm{join}
上記をHaskellのコードに直すと以下。
code:haskell
-- 1
join . fmap join = join . join
-- 2
join . fmap return = join . return = id
-- 3
return . f = fmap f . return
-- 4
join . fmap (fmap f) = fmap f . join
ref: Haskell/Category theory - Wikibooks, open books for an open world
今のモナドの定義
Control.Monad
確認用
Q. モナドとは
Q. return
Q. >>=
関連
Functorクラス
Applicative
Monad
Hask圏
クライスリ圏
Freeモナド
Operationalモナド
Stateモナド
参考
Haskell/圏論 - Wikibooks
Haskell/Category theory - Wikibooks, open books for an open world
Haskell: Monadクラスのこれまでとこれから #Haskell - Qiita
メモ
圏と関手 【 圏論とモナド #1 / 数学 解説 】 - YouTube
自然変換と合成【圏論とモナド #2 / 数学 解説】- YouTube
箱で考えるFunctor、ApplicativeそしてMonad - Qiita
モナド則がちょっと分かった?
猫番 — Monad
Functor-Applicative-Monad Proposal - HaskellWiki
monad of no return · Wiki · Glasgow Haskell Compiler / GHC · GitLab
絶対に理解出来ないモナドチュートリアル - konn-san.com
Control.Monad (haskell2020-0.1.0.0)
Control.Monad (base-4.20.0.1)
関数型言語におけるMonadクラスはApplicativeを継承するべきなのか?MonadとApplicativeとの関係を再確認する #Haskell - Qiita
#Haskell #モナド #群論